public class Text {
    public String minWindow(String ss, String tt) {
        //求最小的覆盖子串
        //用一个变量统计个数
        int kids = 0;
        //先把字符串转字符
        char[] s = ss.toCharArray();
        char[] t = tt.toCharArray();
        //用数组模拟一个哈希表
        int[] hash1 = new int[128];
        for (char ch : t) {
            if (hash1[ch]++ == 0) {
                kids++;
            }
        }
        int n = ss.length();
        //再定义一个哈希表 来统计一下窗口里面的字符
        int[] hash2 = new int[128];
        int min = Integer.MAX_VALUE, begin = -1;  //分别记录最小长度 和起始位置
        for (int left = 0,right = 0,count = 0;right < n; right++) {
            //进窗口
            char in = s[right];
            hash2[in]++;
            //再判断是否是hash1 中的元素
            if (hash2[in] == hash1[in]) count++;
            while (count == kids) {   //说明可以更新结果
                if (right - left + 1 < min) {
                    min = right - left + 1;
                    begin = left;
                }
                //出窗口
                char out = s[left];
                left++;
                if (hash2[out]-- == hash1[out]) {
                    count--;
                }
            }
        }
        if (begin == -1) {
            return "";
        }
        else return ss.substring(begin,begin + min);

    }
    public static void main(String[] args) {
    }
}
